﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Generic.Contract;

namespace Contract.Business.Entity
{
    //Criado por : Gustavo
    //Data       : 10/25/2011 12:19:32 AM
    public class BEVenda : BEGeneric
    {
        #region Atributos
        private BECliente _Cliente;
        private BEEnderecoCliente _EnderecoEntrega;
        private int _CodigoCliente;
        private int _CodigoEnderecoEntrega;
        private DateTime _DataVenda;
        private string _Hora;
        private string _Observacao;
        private BERegiaoEntrega _RegiaoEntrega;
        private int _CodigoRegiaoEntrega;
        private decimal _ValorTotal;
        private decimal _ValorTaxaEntrega;
        private decimal _ValorTroco;
        private decimal _Desconto;
        private List<BEVendaItem> _Itens;
        private List<BEPagamento> _Pagamentos;
        private bool _Enviada;
        private decimal _Acrescimo;
        private bool _Cancelada;
        private string _MotivoCancelamento;

        #endregion

        #region Propriedades
        public BECliente Cliente
        {
            get
            {
                return this._Cliente;
            }
            set
            {
                BECliente previousValue = this._Cliente;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._Cliente = value;
                    if (value != null)
                    {
                        this._CodigoCliente = value.Codigo;
                    }
                    else
                    {
                        this._CodigoCliente = default(int);
                    }
                    this.SendPropertyChanged("Cliente");
                }
            }
        }

        public int CodigoCliente
        {
            get
            {
                return this._CodigoCliente;
            }
            set
            {
                if (this._CodigoCliente != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoCliente = value;
                    this.SendPropertyChanged("CodigoCliente");
                }
            }
        }

        public BEEnderecoCliente EnderecoEntrega
        {
            get
            {
                return this._EnderecoEntrega;
            }
            set
            {
                BEEnderecoCliente previousValue = this._EnderecoEntrega;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._EnderecoEntrega = value;
                    if (value != null)
                    {
                        this._CodigoEnderecoEntrega = value.Codigo;
                    }
                    else
                    {
                        this._CodigoEnderecoEntrega = default(int);
                    }
                    this.SendPropertyChanged("EnderecoEntrega");
                }
            }
        }

        public int CodigoEnderecoEntrega
        {
            get
            {
                return this._CodigoEnderecoEntrega;
            }
            set
            {
                if (this._CodigoEnderecoEntrega != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoEnderecoEntrega = value;
                    this.SendPropertyChanged("CodigoEnderecoEntrega");
                }
            }
        }

        public DateTime DataVenda
        {
            get
            {
                return this._DataVenda;
            }
            set
            {
                if (this._DataVenda != value)
                {
                    this.SendPropertyChanging();
                    this._DataVenda = value;
                    this.SendPropertyChanged("DataVenda");
                }
            }
        }

        public string Hora
        {
            get
            {
                return this._Hora;
            }
            set
            {
                if (this._Hora != value)
                {
                    this.SendPropertyChanging();
                    this._Hora = value;
                    this.SendPropertyChanged("Hora");
                }
            }
        }

        public string MotivoCancelamento
        {
            get
            {
                return this._MotivoCancelamento;
            }
            set
            {
                if (this._MotivoCancelamento != value)
                {
                    this.SendPropertyChanging();
                    this._MotivoCancelamento = value;
                    this.SendPropertyChanged("MotivoCancelamento");
                }
            }
        }

        public BERegiaoEntrega RegiaoEntrega
        {
            get
            {
                return this._RegiaoEntrega;
            }
            set
            {
                BERegiaoEntrega previousValue = this._RegiaoEntrega;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._RegiaoEntrega = value;
                    if (value != null)
                    {
                        this._CodigoRegiaoEntrega = value.Codigo;
                    }
                    else
                    {
                        this._CodigoRegiaoEntrega = default(int);
                    }
                    this.SendPropertyChanged("RegiaoEntrega");
                }
            }
        }

        public int CodigoRegiaoEntrega
        {
            get
            {
                return this._CodigoRegiaoEntrega;
            }
            set
            {
                if (this._CodigoRegiaoEntrega != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoRegiaoEntrega = value;
                    this.SendPropertyChanged("CodigoRegiaoEntrega");
                }
            }
        }

        public decimal ValorTotal
        {
            get
            {
                return this._ValorTotal;
            }
            set
            {
                if (this._ValorTotal != value)
                {
                    this.SendPropertyChanging();
                    this._ValorTotal = value;
                    this.SendPropertyChanged("ValorTotal");
                }
            }
        }

        public decimal ValorTaxaEntrega
        {
            get
            {
                return this._ValorTaxaEntrega;
            }
            set
            {
                if (this._ValorTaxaEntrega != value)
                {
                    this.SendPropertyChanging();
                    this._ValorTaxaEntrega = value;
                    this.SendPropertyChanged("ValorTaxaEntrega");
                }
            }
        }

        public decimal ValorTroco
        {
            get
            {
                return this._ValorTroco;
            }
            set
            {
                if (this._ValorTroco != value)
                {
                    this.SendPropertyChanging();
                    this._ValorTroco = value;
                    this.SendPropertyChanged("ValorTroco");
                }
            }
        }

        public decimal Desconto
        {
            get
            {
                return this._Desconto;
            }
            set
            {
                if (this._Desconto != value)
                {
                    this.SendPropertyChanging();
                    this._Desconto = value;
                    this.SendPropertyChanged("Desconto");
                }
            }
        }

        public List<BEVendaItem> Itens
        {
            get
            {
                return this._Itens;
            }
            set
            {
                if (this._Itens != value)
                {
                    this.SendPropertyChanging();
                    this._Itens = value;
                    this.SendPropertyChanged("Itens");
                }
            }
        }

        public List<BEPagamento> Pagamentos
        {
            get
            {
                return this._Pagamentos;
            }
            set
            {
                if (this._Pagamentos != value)
                {
                    this.SendPropertyChanging();
                    this._Pagamentos = value;
                    this.SendPropertyChanged("Pagamentos");
                }
            }
        }

        public string Observacao
        {
            get
            {
                return this._Observacao;
            }
            set
            {
                if (this._Observacao != value)
                {
                    this.SendPropertyChanging();
                    this._Observacao = value;
                    this.SendPropertyChanged("Observacao");
                }
            }
        }

        public bool Enviada
        {
            get
            {
                return this._Enviada;
            }
            set
            {
                if (this._Enviada != value)
                {
                    this.SendPropertyChanging();
                    this._Enviada = value;
                    this.SendPropertyChanged("Enviada");
                }
            }
        }

        public bool Cancelada
        {
            get
            {
                return this._Cancelada;
            }
            set
            {
                if (this._Cancelada != value)
                {
                    this.SendPropertyChanging();
                    this._Cancelada = value;
                    this.SendPropertyChanged("Cancelada");
                }
            }
        }

        public decimal Acrescimo
        {
            get
            {
                return this._Acrescimo;
            }
            set
            {
                if (this._Acrescimo != value)
                {
                    this.SendPropertyChanging();
                    this._Acrescimo = value;
                    this.SendPropertyChanged("Acrescimo");
                }
            }
        }

        #endregion

        #region Métodos Override
        public override string ToString()
        {
            return this._CodigoCliente + "_" + this._DataVenda + "_" + this._Hora;
        }

        public override bool Equals(object obj)
        {
            try
            {
                return this.Codigo == ((BEVenda)obj).Codigo;
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion
    }
}
